package com.cyy.set;

/**
 * Set 接口
 * @author 会玩的洋洋
 * @since 2022-02-27
 * @param <E>
 */
public interface Set<E> {
    /**
     * 集合内数量
     * @return int
     */
    int size();

    /**
     * 判断集合是否为空
     * @return boolean
     */
    boolean isEmpty();

    /**
     * 清空集合
     */
    void clear();

    /**
     * 判断是否存在某个元素
     * @param element 要搜索的元素
     * @return boolean
     */
    boolean contains(E element);

    /**
     * 添加元素
     * @param element 目标元素
     */
    void add(E element);

    /**
     * 删除元素
     * @param element 目标元素
     */
    void remove(E element);

    /**
     * 对集合进行遍历
     * @param visitor 遍历方法
     */
    void traversal(Visitor<E> visitor);

    abstract class Visitor<E> {
        public boolean stop;

        /**
         * 自定义遍历方法
         * @param element 要遍历的元素
         * @return boolean 暂停条件
         */
        public abstract boolean visit(E element);
    }
}
